package main

import "go-leetcode/leetcode/utils"

// 98. 验证二叉搜索树
func main() {
	root := utils.SortedArrayToBST([]int{2, 2, 2})
	res := isValidBST(root)
	println(res)
}

func isValidBST(root *utils.TreeNode) bool {
	treeNodes := selfInorderTraversal(root)
	treeLen := len(treeNodes)
	for i := 0; i < treeLen-1; i++ {
		if treeNodes[i] >= treeNodes[i+1] {
			return false
		}
	}

	return true
}

func selfInorderTraversal(root *utils.TreeNode) []int {
	var res []int
	if root == nil {
		return res
	}
	res = append(selfInorderTraversal(root.Left), root.Val)
	return append(res, selfInorderTraversal(root.Right)...)
}

// 给你一个二叉树的根节点 root ，判断其是否是一个有效的二叉搜索树。
//
//有效 二叉搜索树定义如下：
//
//节点的左子树只包含 小于 当前节点的数。
//节点的右子树只包含 大于 当前节点的数。
//所有左子树和右子树自身必须也是二叉搜索树。
//
//
//示例 1：
//
//
//输入：root = [2,1,3]
//输出：true
//示例 2：
//
//
//输入：root = [5,1,4,null,null,3,6]
//输出：false
//解释：根节点的值是 5 ，但是右子节点的值是 4 。
//
//
//提示：
//
//树中节点数目范围在[1, 104] 内
//-231 <= Node.val <= 231 - 1
